﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Web;
using System.Net.Mail;
using System.Net.Mime;
using System.Diagnostics;
using System.Threading;
using RiskMan.Views.Dialogs;


namespace RiskMan.Config
{
    class Register
    {
        public static string dataEndLicense;
        public static string typeVersion;
        private string UID;
        private string text;
        private string FIO;
        private string email;
        private string call;
        private string broker;
        private string skype;
        private bool isCheck = true;
        

        public bool IsRun { get; set; }
        public String message = "";

        public Register ( string uid )
        {
            try
            {
                this.UID = uid;

                if ( this.Load( "http://rbkm.ru/userid/test/123_user_id.txt" ) != false )
                    this.CheckUID( );
                else
                    this.IsRun = false;
            }
            catch ( Exception )
            {
                #region
                //if (new DialogOkCancel("Будет произведена регистрация данной копии риск менеджера", "Внимание!", MessageBoxButtons.OKCancel) != DialogResult.Cancel)
                //{
                //    RegisterInfo reg = new RegisterInfo();
                //    reg.textBox7.Text = UID;
                //    reg.ShowDialog();

                //    #region Отправка e-mail с регистрацией
                //    SmtpClient Smtp = new SmtpClient("smtp.inbox.ru", 25);
                //    Smtp.Credentials = new NetworkCredential("register.rbkm", "18190225rbkm");
                //    MailMessage Message = new MailMessage()
                //    {
                //        Subject = "Регистрация Риск Менеджера(RiskMan)",
                //        Body = "UID: " + UID + " DATETIME: " + DateTime.Now.ToString() + "\r\nFIO: "
                //        + reg.fio + " EMAIL: " + reg.email + " TELL: " + reg.call + " BROKER: " + reg.broker + " SKYPE: " + reg.skype,
                //        From = new MailAddress("register.rbkm@inbox.ru"),
                //    };
                //    Message.To.Add(new MailAddress("support@rbkm.ru"));
                //    Smtp.Send(Message);
                //    #endregion

                //    new DialogOkCancel("Регистрация риск-менеджера будет подтверждена администрацией в течении часа", "Внимание!");
                //}
                #endregion
                ErrorRegisterView er = new ErrorRegisterView( uid );
                er.ShowDialog( );
                
                IsRun = false;
            }
        }

        private bool CheckUID()
        {
            String[] array = text.Split('.');

            bool tr = false;
            for (int i = 0; i < array.Count(); i++)
            {
                string[] tmp = array[i].Split(';');
                string tUID = this.getString(tmp[0]);

                string[] tDate = tmp[1].Split('-');
                DateTime date = new DateTime(Convert.ToInt16(tDate[0]),
                                             Convert.ToInt16(tDate[1]),
                                             Convert.ToInt16(tDate[2])
                );
                MainWindow.countLisence = Convert.ToInt32(tmp[3]);
                dataEndLicense = tmp[1];
                typeVersion = tmp[4];

                if (tUID == this.UID)
                {
                    tr = true;
                    if (this.Load("http://rbkm.ru/userid/datetime.txt") != false)
                    {
                        string[] time = text.Split('-');
                        DateTime tdate = new DateTime(Convert.ToInt16(time[0]),
                                             Convert.ToInt16(time[1]),
                                             Convert.ToInt16(time[2])
                        );
                        if (date <= tdate)
                        {
                            IsRun = false;
                            message = "Cрок действия этой версии истек. Для продления работы риск менеджера свяжитесь с администрацией";
                        }
                        else
                            IsRun = true;
                        break;
                    }
                    else
                    {
                        this.IsRun = false;
                        message = "Ошибка проверки верссии. Для продления работы риск менеджера свяжитесь с администрацией";
                    }
                }
            }

            if (tr == false)
            {
                if ( new DialogOkCancel( "Будет произведена регистрация данной копии риск менеджера", "Внимание!" ).Result
                    != System.Windows.MessageBoxResult.Cancel)
                {
                    RegisterInfo reg = new RegisterInfo();
                    reg.textBox7.Text = UID;
                    reg.ShowDialog();

                    if ( reg.Cancel == true )
                    {
                        #region Отправка e-mail с регистрацией
                        SmtpClient Smtp = new SmtpClient( "smtp.inbox.ru", 25 );
                        Smtp.Credentials = new NetworkCredential( "register.rbkm", "18190225rbkm" );
                        MailMessage Message = new MailMessage( )
                        {
                            Subject = "Регистрация Риск Менеджера(RiskMan)",
                            Body = "UID: " + UID + " DATETIME: " + DateTime.Now.ToString( ) + "\n\nFIO: "
                            + reg.fio + " EMAIL: " + reg.email + " TELL: " + reg.call + " BROKER: " + reg.broker + " SKYPE: " + reg.skype,
                            From = new MailAddress( "register.rbkm@inbox.ru" ),
                        };
                        Message.To.Add( new MailAddress( "support@rbkm.ru" ) );
                        Smtp.Send( Message );
                        #endregion
                        new DialogOkCancel( "Регистрация риск-менеджера будет подтверждена администрацией в течении часа", "Внимание!" );
                    }
                }
                IsRun = false;
            }
            return true;
        }

        private string getString(string uid)
        {
            string result = "";
            foreach (var tmp in uid)
                if (Char.IsLetterOrDigit(tmp) == true)
                    result += tmp;
            return result;
        }

        private bool Load(string address)
        {
            try
            {
                WebClient webClient = new WebClient();
                this.text = webClient.DownloadString(address);
            }
            catch (Exception ex)
            {
                return false;
            }

            return true;
        }
    }
}
